"""Python 异常处理基础知识点
======================

异常处理是Python中用于处理程序运行时错误的机制。
通过使用try-except语句，可以让程序在遇到错误时继续执行而不是崩溃。

异常处理语法结构：
    try:
        可能出现异常的代码
    except 异常类型:
        处理异常的代码
    except (异常类型1, 异常类型2):
        处理多种异常的代码
    except Exception as e:
        捕获所有异常
    else:
        没有异常时执行的代码
    finally:
        无论是否出现异常，都会执行的代码
"""

# 捕获指定异常
# 当访问未定义的变量时会引发NameError异常
try:
    print(name)
except NameError:
    print("未定义变量name")

# 捕获多个异常
# 当出现除零错误(ZeroDivisionError)或名称错误(NameError)时执行异常处理代码
# 多个异常类型需要用圆括号括起来
try:
    print(1/0)
except (ZeroDivisionError, NameError):
    print("除数不能为0或变量未定义")

# 捕获所有异常（Exception为所有异常的基类）
# 通过as关键字将异常对象赋值给变量e，可以获取异常的详细信息
try:
    print(1/0)
except Exception as e:
    print(e)

# 使用else和finally子句
# else子句在没有异常时执行
# finally子句无论是否有异常都会执行，通常用于资源清理
try:
    num = 10/2
except ZeroDivisionError:
    print("除数不能为0")
else:
    print("计算成功完成")
finally:
    print("异常处理结束")

"""
知识点总结：

1. 异常处理结构
   - try: 包含可能引发异常的代码
   - except: 捕获并处理异常
   - else: 当try块中没有异常时执行
   - finally: 无论是否有异常都会执行

2. 常见异常类型
   - NameError: 访问未定义的变量
   - ZeroDivisionError: 除零错误
   - ValueError: 值错误，如类型转换失败
   - TypeError: 类型错误，如对不支持的类型进行操作
   - FileNotFoundError: 文件未找到错误
   - Exception: 所有异常的基类，可以捕获所有异常

3. 异常处理最佳实践
   - 尽量捕获具体的异常类型而不是使用通用的Exception
   - 使用as关键字获取异常对象，便于调试和记录
   - finally块通常用于资源清理，如关闭文件、网络连接等
   - 不要忽略异常，即使不处理也应该有适当的日志记录
"""